# author ： 以凝
# time   ： 2024/3/17  22:49
import hashlib

from PyQt5.QtGui import QColor

def inverted(color):
    '''
    Inverted color
        让我们逐步分析这个函数：
        color.getRgb() 调用 QColor 对象的 getRgb() 方法，返回一个表示颜色的四元组 (r, g, b, a)，其中 r、g 和 b 分别代表红、绿、蓝颜色成分的值，而 a 代表透明度（Alpha）。每个成分的值通常在0到255之间。
        [255 - v for v in color.getRgb()] 这段代码是一个列表推导式（list comprehension），它遍历由 getRgb() 返回的 RGBA 四元组，然后对每个颜色通道值 v 计算它的补值 255 - v。这样，每个颜色成分值都从它的最大值中被减去，从而得到颜色补值。
        QColor(*[...]) 使用星号操作符（*）解包列表，并传递解包后的值作为参数来创建一个新的 QColor 对象。这会生成新的颜色，其 RGB 成分已经被反转，而 Alpha 透明度通常保持不变（如果原始颜色中包含 Alpha 值的话）。
        假设我们传递了一个 RGB 颜色 (100, 150, 200) 到 inverted() 函数中，经过 [255 - v for v in color.getRgb()] 处理后得到 (155, 105, 55)，这就是原始颜色的反色。如果颜色还包含一个 Alpha 值，比如 (100, 150, 200, 125)，反色处理后仍将保留 Alpha 值，即 (155, 105, 55, 125)。
        反色通常用于创建对比度高的视觉效果或是在图形编辑和处理中使用。
    '''
    return QColor(*[255 - v for v in color.getRgb()])


def generate_color_by_text(text):
    s = ustr(text)
    hash_code = int(hashlib.sha256(s.encode('utf-8')).hexdigest(), 16)
    r = int((hash_code / 255) % 255)
    g = int((hash_code / 65025) % 255)
    b = int((hash_code / 16581375) % 255)
    return QColor(r, g, b, 100)